Shell & Bash 사용 정리

NOTE

Bash 기본 사용법 정리. 셸 종류·정규표현식·와일드카드, 환경/셸 변수, 입출력 리다이렉션과 파일 디스크립터, alias, 환경변수 설정 파일.

📌 개념

vi 편집기에서 셸 명령 실행

편집 중인 파일을 저장하지 않고도 컴파일·grep 같은 외부 명령을 확인하고 싶을 때 쓴다. 매번 vi를 종료했다가 다시 여는 것보다 훨씬 빠르다.

명령설명
:!명령어vi 종료 없이 외부 명령 1회 실행
:shvi 종료 후 셸로 이동 (여러 명령 실행 가능)
exit셸 종료 → vi 복귀

정규표현식 / 와일드카드

와일드카드는 셸이 명령 실행 전에 파일명을 확장(glob)하는 것이고, 정규표현식은 grep/sed 등 개별 프로그램이 문자열 패턴을 해석하는 것이다. 둘 다 *를 쓰지만 의미가 다르므로 헷갈리지 않아야 한다.

기호의미
*(정규식) 0회 이상 반복 / (셸) 모든 파일
^줄의 시작
$줄의 끝
..임의의 2글자
~현재 사용자 홈 디렉토리

명령 연결

형태설명
명령1 ; 명령2순차 실행
명령1 | 명령2앞 명령의 결과를 다음 명령 입력으로 전달(파이프)
'명령'문자열 그대로 인식 (확장 X)

파일 디스크립터 (FD)

정상 출력과 오류 출력을 분리해 두는 이유는, 로그를 파일로 저장할 때 정상 결과와 에러 메시지를 따로 걸러내거나(2>/dev/null) 합쳐서(2>&1) 볼 수 있게 하기 위함이다.

번호이름설명
0stdin표준 입력
1stdout표준 출력
2stderr표준 오류

출력 리다이렉션

>>가 필요한 이유는 스크립트를 반복 실행할 때 >를 쓰면 매번 기존 로그가 사라지기 때문이다. 로그 누적이 필요하면 >>, 매번 새로 시작해야 하면 >를 쓴다.

형태설명
>파일 덮어쓰기
>>파일에 추가

환경변수 설정 파일

/etc/*는 시스템의 모든 사용자에게 적용되고 ~/.bash*는 해당 계정에만 적용된다는 스코프 차이를 알아두면, “왜 내 alias가 다른 계정에는 안 보이는지” 같은 문제를 바로 파악할 수 있다.

파일역할
/etc/profile시스템 전체 환경변수
~/.bash_profile사용자 환경변수
/etc/bashrc시스템 alias
~/.bashrc사용자 alias

매개변수

  • $1 ~ $N: 스크립트 실행 시 전달된 인자

💻 예시

셸 종류 확인 / 변수 목록

cat /etc/shells   # 설치된 로그인 셸 목록
env               # 환경변수만
set               # 셸 변수 + 환경변수

Bash 변수

변수명=값          # 띄어쓰기 금지
SOME=test
echo $SOME         # 변수 출력
 
export SOME        # 환경변수 등록
unset 변수명        # 변수 해제
export -n 변수명    # 환경변수 → 셸 변수

출력 (printf)

printf "형식문자열" 인수
printf "%d + %d = %d\n" 10 10 20

리다이렉션

ls 1> ls.out          # 정상 출력 저장
ls 2> err.out         # 오류 출력 저장
cat > 1.txt           # 입력값 저장
echo "hi" > 1.txt
 
ls . /abc > 1.txt 2>&1   # stdout + stderr 합치기 (&1 = 1번이 가리키는 파일)

alias

자주 쓰는 긴 명령을 짧게 줄여 반복 타이핑을 줄이기 위해 쓴다. 다만 alias는 현재 셸 세션에만 유효하므로, 재부팅 후에도 남기려면 반드시 .bashrc 같은 설정 파일에 등록해야 한다(아래 IMPORTANT 참고).

alias lll='ls -al'    # 등록
alias                 # 확인
unalias 별명           # 해제
 
source ~/.bashrc      # 즉시 적용 (로그아웃 없이 반영)
 
# 영구 저장
cd ~
vi .bashrc            # alias lll='ls -al' 추가
source ~/.bashrc

IMPORTANT

alias는 기본적으로 재부팅 시 사라진다. .bashrc에 저장해야 영구 적용된다.

설정 반영

source ~/.bashrc
source ~/.bash_profile